package initialize

import (
	"github.com/gin-gonic/gin"
	"interview/api"
	"interview/middleware"
	"interview/pkg/global"
	"interview/router"
)

// Routers 初始化总路由
func Routers() *gin.Engine {
	// 创建不带中间件的路由
	r := gin.New()

	//添加速率访问限制中间件
	r.Use(middleware.RateLimiter())
	// 添加访问记录中间件
	r.Use(middleware.AccessLog)
	// 添加异常处理中间件
	r.Use(middleware.Exception)
	// 添加全局事务处理中间件
	r.Use(middleware.Transaction)
	// 添加跨域中间件
	r.Use(middleware.Cors())
	// 初始化JWT中间件
	jwtAuth, err := middleware.InitJwtAuth()
	if err != nil {
		global.Logger.Panic("初始化JWT中间件异常: %v", err)
	}

	r.GET("/ping", api.Ping)

	// 方便统一添加路由前缀
	group := r.Group("")
	// 注册公共路由
	router.InitPublicRouter(group)
	// 注册基础路由，免鉴权
	router.InitBaseRouter(group, jwtAuth)
	// 注册用户路由
	router.InitUserRouter(group, jwtAuth)
	// 注册菜单路由
	router.InitSysMenuRouter(group, jwtAuth)
	// 注册角色路由
	router.InitRoleRouter(group, jwtAuth)
	// 注册接口路由
	router.InitApiRouter(group, jwtAuth)

	global.Logger.Debug("初始化路由完成")
	return r
}
